#include <InputListener.h>

class CNetrekClientListener;
enum ENetrekClientState;
namespace AVUI
{
    class UIElement;
}

class CBaseGameState : IInputListener
{
public:
    CBaseGameState() : m_pListener(NULL) { }
    virtual void Initialize(CNetrekClientListener* pListener) { m_pListener = pListener; }
    virtual void Cleanup() { }

    virtual void FrameStart() { }
    virtual void FrameEnd() { }

    virtual void OnKeyboardAcquired() { };
    virtual void OnMouseAcquired() { };
    virtual void MouseMoved(int, int, int) { }
    virtual void MousePressed(EMouseButtonID) { }
    virtual void MouseReleased(EMouseButtonID) { }
    virtual void KeyPressed(EKeyboardButtonID) { }
    virtual void KeyReleased(EKeyboardButtonID) { }

protected:
    void TransitionMoveToNewState(AVUI::FrameworkElement* pRoot, ENetrekClientState eNewState);
    void MoveToNewStatePostTransition(AVUI::Object* pSender, AVUI::EventArgs* pEventArgs);

    CNetrekClientListener* m_pListener;

    ENetrekClientState m_eNewStatePostTransition;
};


